#
#------------------------------------
#      COIN     __                  |
#             >(' )                 |
#               )/                  |
#              /  `----/            |
#              \  ~=- /             |
#    ~^~^~^~^~^~^~^~^~^~^~^~^~^~^   |
#------------------------------------      
#
##################################################################################################
###############                  Definition des fonctions                          ###############
##################################################################################################


library(xlsReadWrite)
library(data.table)

######
## Fonction qui prend les fichiers excel Argos contenus dans un repertoire et les assemble en 
## un seul fichier texte. Les localisation ou la date est inconnue sont supprimees
## Arguments :
## path : chemin vers le repertoire dont on veut recuperer les donnees
## destfile : nom du fichier final
## extension : extension des fichiers source (seuls xls sont supportes)
## platformIds : colliers dont on veut les informations
mergeXLS <- function (path=getwd(), destfile="merged_data.txt", extension="*.xls", platformIds=NULL, include=TRUE) {
  
  data <- NULL
  files <- list.files(path, pattern=extension)
  i <- 1
  rawdata <- list()
  for (file in files) {
    print (paste("reading file", file))
    tmp <- read.xls(file.path(path, file))
    tmp <- tmp[, 1:35]
    if (!is.null(platformIds)) {
      if (include) {
        filtered <- tmp[tmp$Platform.ID. %in% platformIds, ]
      } else {
        filtered <- tmp[!(tmp$Platform.ID. %in% platformIds), ]
      }
    } else {
      filtered <- tmp
    }
    rawdata[[i]] <- data.table(filtered)
    i <- i + 1
  }
  #data <- rbindlist(rawdata)
  data <- do.call(rbind, rawdata)
  setkey(data, Platform.ID.)
  
  # Supprimons les donnees ou il n'y a pas la date!
  data <- data[Loc..date != "",]
  
  dates <- unlist(strsplit(as.character(data$Loc..date), split="\\ "))
  # Creation des colonnes jour et heure a partir du vecteur date. Les jours sont
  # les indices impairs et les heures les indices pairs. Pas forcement simple
  # d'utilisation mais beaucoup plus performant.
  data$Jour <- dates[seq(1, length(dates) - 1, by = 2)]
  data$Heure <- dates[seq(2, length(dates), by = 2)]
  data$ID <- as.numeric(data$Loc..date)
  
  tables()
  print("writing data")
  write.table(data, file.path(path, destfile))
  
} 


##################################################################################################
##############                           Utilisation                               ############### 
##################################################################################################

filter <- 113045:113056
mergeXLS(path="C:/UQAR/Recherche/Maitrise/Donnees/Bylot/Brutes/Argos", destfile="Bylot2012_renards_merged.txt", platformIds=filter, include=FALSE)

#write.table(data, file.path("C:/UQAR/Recherche/Maitrise/Donnees/Bylot/Argos", "Bylot2012_renards_merged.txt"))


